{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Science Africa 2016 - Prerequisite software\n",
"\n",
"The [Data Science Africa 2016 summer school](http://www.datascienceafrica.org/dsa2016/) will mainly cover the broad areas of Machine Learing and Data Science. This is the second summer school on data science following the previous one held at Dedan Kimathi University of Technology in 2015.\n",
"\n",
"To ensure we hit the ground running, it is essential you install the prerequiste software and test it out and make sure it is working on your computer. The venue for the summer school will have some computers on which the software will have been installed but you are advised to come with your own laptop with the software installed. \n",
"\n",
"Luckily all the software required has already been prepackaged in a bundle called [Anaconda](https://www.continuum.io/downloads). You can download the various versions of the software for your laptop OS and architecture from the [Anaconda website](https://www.continuum.io/downloads)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing the software\n",
"If you installed the Anaconda software properly, you should be reading this :-). If you are reading this on a colleagues machine who got it installed then you are advised to ask your colleague who owns this machine how he/she did it.\n",
"\n",
"We will be mainly using the ipython notebook for the lab sessions, please get familiar with using the notebook. To ensure everything is working please follow the instructions that follow and run the corresponding commands. The goal state is to have no errors at the end of this process."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reading in data using Pandas\n",
"[Pandas](http://pandas.pydata.org) is a Python library that is particularly good for doing any data-related tasks in Python. We will use several other libraries in Python as well. You are adviced to go through the [scipy-lectures (sections 1.1 - 1.4 and 3.1)](http://www.scipy-lectures.org) to get a good grounding in the libraries we will be using.\n",
"\n",
"To test that everything is working fine:\n",
"1. Go to the website and download the [Production of major crops by district, UCA 2008 / 2009](http://catalog.data.ug/dataset/production-of-major-crops-by-district-uca-2008-2009) data. It includes excel sheets for the 4 regions of the country detailing in each production figures for major crops.\n",
"2. Use Pandas to read in the first sheet of data from the excel document as shown below\n",
"3. Work through some of the example analyses shown and complete the questions that follow.\n",
"4. Go get a cold beer, drink 3/4 of it and inform a friend that you are now ready for the data science summer school 2016 !"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Import the relevant libraries to this notebook\n",
"%matplotlib inline\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" District | \n",
" Plantain Bananas | \n",
" Finger millet | \n",
" Maize | \n",
" Sorghum | \n",
" Rice | \n",
" Column1 | \n",
" Sweet Potatoes | \n",
" Irish Potaoes | \n",
" Cassava | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Kalangala | \n",
" 531 | \n",
" 0 | \n",
" 776 | \n",
" 0 | \n",
" NaN | \n",
" 0.0 | \n",
" 4343 | \n",
" 0 | \n",
" 7950 | \n",
"
\n",
" \n",
" 1 | \n",
" Kampala | \n",
" 3004 | \n",
" 0 | \n",
" 245 | \n",
" 0 | \n",
" NaN | \n",
" 0.0 | \n",
" 796 | \n",
" 0 | \n",
" 1054 | \n",
"
\n",
" \n",
" 2 | \n",
" Kayunga | \n",
" 14657 | \n",
" 710 | \n",
" 18107 | \n",
" 130 | \n",
" 207.0 | \n",
" NaN | \n",
" 29331 | \n",
" 0 | \n",
" 33867 | \n",
"
\n",
" \n",
" 3 | \n",
" Kiboga | \n",
" 65380 | \n",
" 46 | \n",
" 34875 | \n",
" 58 | \n",
" 251.0 | \n",
" NaN | \n",
" 7969 | \n",
" 916 | \n",
" 14186 | \n",
"
\n",
" \n",
" 4 | \n",
" Luwero | \n",
" 37534 | \n",
" 0 | \n",
" 29849 | \n",
" 0 | \n",
" 362.0 | \n",
" NaN | \n",
" 15741 | \n",
" 77 | \n",
" 39732 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" District Plantain Bananas Finger millet Maize Sorghum Rice Column1 \\\n",
"0 Kalangala 531 0 776 0 NaN 0.0 \n",
"1 Kampala 3004 0 245 0 NaN 0.0 \n",
"2 Kayunga 14657 710 18107 130 207.0 NaN \n",
"3 Kiboga 65380 46 34875 58 251.0 NaN \n",
"4 Luwero 37534 0 29849 0 362.0 NaN \n",
"\n",
" Sweet Potatoes Irish Potaoes Cassava \n",
"0 4343 0 7950 \n",
"1 796 0 1054 \n",
"2 29331 0 33867 \n",
"3 7969 916 14186 \n",
"4 15741 77 39732 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"datafilename = \"productionmajorcropsregio20082009.xls\" # this file must be in your path\n",
"\n",
"# Read in data skipping some rows at the top and the last row at the bottom that has the sub-totals\n",
"data = pd.read_excel(datafilename, sheet=\"CENTRAL\", skiprows=2, skip_footer=1, thousands=',') \n",
"data.head() # show the first 5 rows of the data. try data.head(20)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" District | \n",
" Maize | \n",
" Cassava | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Kalangala | \n",
" 776 | \n",
" 7950 | \n",
"
\n",
" \n",
" 1 | \n",
" Kampala | \n",
" 245 | \n",
" 1054 | \n",
"
\n",
" \n",
" 2 | \n",
" Kayunga | \n",
" 18107 | \n",
" 33867 | \n",
"
\n",
" \n",
" 3 | \n",
" Kiboga | \n",
" 34875 | \n",
" 14186 | \n",
"
\n",
" \n",
" 4 | \n",
" Luwero | \n",
" 29849 | \n",
" 39732 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" District Maize Cassava\n",
"0 Kalangala 776 7950\n",
"1 Kampala 245 1054\n",
"2 Kayunga 18107 33867\n",
"3 Kiboga 34875 14186\n",
"4 Luwero 29849 39732"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# You can select a sub dataset\n",
"data_maize_cassava = data[['District', 'Maize', 'Cassava']]\n",
"data_maize_cassava.head()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Maize production for Central region is 449858.0 Metric tonnes\n"
]
}
],
"source": [
"# Get total maize production for central region\n",
"# First remove the last row with t\n",
"print \"Maize production for Central region is {} Metric tonnes\".format(data['Maize'].astype('float32').sum())"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot cassava production by district\n",
"data.plot(x='District', y='Cassava', kind='bar')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### For you to do"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Write your code to complete the following functions\n",
"\n",
"def read_allregionsdata(datafilename):\n",
" # Read in all the data from the different regions\n",
" # from the excel sheet \"datafilename\"\n",
" \n",
" # WRITE YOUR CODE HERE\n",
" data_central = 0\n",
" data_eastern = 0\n",
" data_northern = 0\n",
" data_western = 0\n",
" \n",
" return data_central, data_eastern, data_northern, data_western\n",
"\n",
"def get_total_sp_eastern(data_eastern):\n",
" # Get the total tonnage of Sweet potatoes from the Eastern region\n",
" \n",
" # WRITE YOUR CODE HERE (AND REPLACE THE DEFAULT VALUE FOR total_sp..)\n",
" total_sp = 0\n",
" \n",
" return total_sp\n",
" \n",
"def get_max_prod_western(data_western):\n",
" # Get the maximum production of Finger millet in the western region\n",
" # This is not the total production but the maximum production of a district\n",
" \n",
" # WRITE YOUR CODE HERE\n",
" max_prod = 0\n",
" \n",
" return max_prod\n",
"\n",
"def get_dist_max_prod_western(data_western):\n",
" # Get the district with the maximum production of Finger millet in the western region\n",
" \n",
" # WRITE YOUR CODE HERE\n",
" max_prod_dist = \"\"\n",
" \n",
" return max_prod_dist\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Testing...\n",
"data_central, data_eastern, data_northern, data_western = read_allregionsdata(datafilename)\n",
"assert get_total_sp_eastern(data_eastern) == 312405.0, \"Sorry wrong answer, minus 1 beer :-(\"\n",
"assert get_max_prod_western(data_western) == 9674.0, \"Answer feels wrong, this is the western region we are talking about\"\n",
"assert get_dist_max_prod_western(data_western).strip() == \"Nakasongola\", \"Naah, that district was abolished last week !\"\n",
"print \"Congratulations, all is working just fine !!!\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Extra Bonus questions (in some instances \"bonus\" can be replaced with \"beer\")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def combine_alldatasets(data_central, data_western, data_eastern, data_northern):\n",
" # Combine all the regional datasets into one national dataset\n",
" \n",
" # WRITE YOUR CODE HERE\n",
" nationalData = 0\n",
" \n",
" return nationalData\n",
"\n",
"def get_total_national_cassava_prod(nationalData):\n",
" # Attempt this after the previous question\n",
" # Get the total national production for cassava (tons) for 2008-2009\n",
" \n",
" # WRITE YOUR CODE HERE\n",
" total_cassava = 0\n",
" \n",
" return total_cassava"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"d = combine_alldatasets(data_central, data_western, data_eastern, data_northern)\n",
"assert get_total_national_cassava_prod(d) == 1.63924e+06, \"Comeon man, cassava is a big deal - much more than that !\"\n",
"print \"Congratulations, you get 2-tickets to beerville; all you can drink :-)\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}